package com.lxg.ai.service;

import com.lxg.ai.dto.LegalPrompt;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.model.input.structured.StructuredPrompt;
import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
import reactor.core.publisher.Flux;

import java.util.List;


public interface StreamChatAssistant {

    /**
     * 普通聊天
     *
     * @param message
     * @return
     */
    Flux<String> chat(String message);

    /**
     * 聊天
     *
     * @param userId  用户 ID  (根据ID隔离记忆)
     * @param message 消息
     * @return {@link String }
     */
    Flux<String> chat(@MemoryId Long userId, @UserMessage String message);

    /**
     * 聊天
     *
     * @param message 消息
     * @return
     */
    Flux<String> chat(@UserMessage List<ChatMessage> message);

    /**
     * 提示词工程
     *
     * @param question
     * @return
     */
    @SystemMessage("你是一位专业的中国法律顾问，只回答与中国法律相关的问题。输出限制：对于其他领域的问题禁止回答，直接返回'抱歉，我只能回答中国法律相关的问题。'")
    @UserMessage("根据中国{{legal}}法律，请回答以下法律问题：{{question}}")
    Flux<String> promptChat(@V("legal") String legal, @V("question") String question);

    @SystemMessage("你是一位专业的中国法律顾问，只回答与中国法律相关的问题。输出限制：对于其他领域的问题禁止回答，直接返回'抱歉，我只能回答中国法律相关的问题。'")
    Flux<String> promptChat(LegalPrompt question);



}
